#ifndef __RINGQUEUE_H__
#define __RINGQUQUQ_H__

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>
//define cycle queue data size max 
#define MAX_QNODE (5)
//define cycle queue data type
typedef int CQDataType;
//define cycle queue node and cycle queue node pointer
typedef struct CQueueNode
{
	CQDataType* pdata;
	int headindex;
	int tailindex;
	int maxdata;
	int validdata;
}CQNode,* PCQNode;

// cycle queue init 
void CQueueInit(PCQNode cqueue);

// cycle queue destroy
void CQueueDestroy(PCQNode cqueue);


// cycle queue push
void CQueuePush(PCQNode cqueue, CQDataType value);

// cycle queue pop
void CQueuePop(PCQNode cqueue);


// return cycle queue front
CQDataType CQueueFront(PCQNode cqueue);

// return cycle queue back
CQDataType CQueueBack(PCQNode cqueue);


// return cycle queue empty
//if queue is empty, bool==true
//else, bool==false
bool CQueueEmpty(PCQNode cqueue);

// return cycle queue full
//if queue is full, bool==true
//else, bool==false
bool CQueueFull(PCQNode cqueue);


// return cycle queue max data size
int CQueueSize(PCQNode cqueue);

// return cycle queue valid data size
int CQueueValid(PCQNode cqueue);



#endif /*__RINGQUEUE_H__*/
